<?php
/* vim: set expandtab sw=2 sts=2 ts=2 tw=150 nu: */

App::uses('Controller', 'Controller');
App::uses('AuthComponent', 'Controller/Component');

/**
 * Controlador padrão para uma aplicação do Cake.
 *
 * Esta classe contém todos os métodos que serão herdados por todas as classes controladoras da aplicação.
 */
class AppController extends Controller {

  public $components = array(
    'Session',
    'RequestHandler',
    'Auth' => array(
      'loginAction'    => array('controller' => 'pessoas', 'action' => 'login'),
      'loginRedirect'  => array('controller' => 'pessoas', 'action' => 'index'),
      'logoutRedirect' => array('controller' => 'pages',   'action' => 'display', 'home'),
      'authorize'      => array('Controller'),
      'authError'      => 'Você não está autorizado a acessar este local.',
      'loginError'     => 'O e-mail e/ou senha informados são inválidos, tente novamente.',
      'authenticate'   => array(
        AuthComponent::ALL => array(
          'userModel' => 'Pessoa',
          'fields'    => array(
            'username' => 'email',
            'password' => 'senha'
          )
        ),
        // Autenticação de usuários baseada no envio de dados por POST, geralmente através
        // de um formulário de login que os usuários inserem suas informações.
        'Form',
        // Autenticação de usuários usando a autenticação HTTP Basic.
        //'Basic',
        // Autenticação de usuários usando a autenticação Digest HTTP.
        //'Digest',
      ),
    )
  );

  // {{{ Cake Callbacks

  public function beforeFilter() {
    $this->autoLayout = false;
    if (  !$this->RequestHandler->isAjax() && $this->name !== 'App') {
      echo "Operação não permitida";
      $this->_stop(0);
    }

    $browser = env('HTTP_USER_AGENT');
    if (preg_match('/MSIE/', $browser)) {
      $this->Session->setFlash('Vai criar vergonha na cara e trocar de navegador.', 'mensagens', array('classe' => 'alert'));
    }

    //Security::setHash('sha512');
    $this->Auth->allow('inicializar', 'display');
    $this->set("logged_in", $this->Auth->loggedIn());
    $this->set("usuario_logado", $this->Auth->user());
  }

  // }}}

  // {{{ Métodos do componente Auth

  public function isAuthorized($usuario = null, $requisicao = null) {
    return true;
  }

  // }}}

  /**
   *
   * Instacia a classe de visualização do controlador.
   * @return View Retorna a instância da classe de visualização do controlador, que também pode ser acessada pelo atributo 'View'.
   */
  protected function _instanciarClasseDeVisualizacao() {
    $viewClass = $this->viewClass;
    if ($this->viewClass != 'View') {
      list($plugin, $viewClass) = pluginSplit($viewClass, true);
      $viewClass = $viewClass . 'View';
      App::uses($viewClass, $plugin . 'View');
    }
    $View = new $viewClass($this);
    $this->View = $View;
    return $View;
  }

  public function inicializar() {
    $this->autoRender = false;
    $this->_instanciarClasseDeVisualizacao();
    $this->response->body($this->View->renderLayout('<div id="carregando-pagina"></div>', $this->layout));
    return $this->response;
  }

}
?>